iT邦幫忙

2024 iThome 鐵人賽

DAY 1
2
自我挑戰組

學習網頁開發系列 第 1

用 Docker 建立 PG Container 連結到本地的 Django

  • 分享至 

  • xImage
  •  

前提條件

  1. docker
  2. dbeaver
  3. 一個用django開啟的檔案

步驟

用 docker 跑 postgres

docker run --name container-name -e POSTGRES_PASSWORD=mypassword -e POSTGRES_USER=myuser -e POSTGRES_DB=mydatabase -p 5432:5432 -d postgres:latest

重點記得環境變數,因為他們會影響到django跟dbeaver設定。
環境變數:

  1. POSTGRES_PASSWORD (必填)
  2. POSTGRES_USER (預設 postgres)
  3. POSTGRES_DATABASE (預設 跟POSTGRES_USER 一樣)

optional

本地與container同步資料:
-v ./Desktop/storage:/var/lib/postgresql/data

Django 連結到 Docker 的 PG

套件下載:
windows: poetry add psycopg2
mac: poetry add psycopg2-binary

settings.py檔中找到資料庫的設定:

# 這是預設的sqlite設定
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

把它改成以下:

皆為自己設定的內容

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': ‘<POSTGRES_DB>’,
        'USER': '<POSTGRES_USER>',
        'PASSWORD': '<POSTGRES_USER>',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

記得另外再利用 dotenv ,把資料存在 .env,例如:
settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.getenv("POSTGRES_DB"), 
        'USER': os.getenv("POSTGRES_USER"),
        'PASSWORD': os.getenv("POSTGRES_PASSWORD"),
        'HOST': os.getenv("POSTGRES_HOST"), 
        'PORT': os.getenv("POSTGRES_PORT"),
    }
}

.env:

POSTGRES_DB = mydatabase
POSTGRES_USER = myuser
POSTGRES_PASSWORD = mypassword
POSTGRES_HOST = localhost
POSTGRES_PORT = 5432

Dbeaver 連結到 docker 裡的 pg

連結

點擊最左上角的按鈕:
Screenshot 2024-08-26 at 5.59.22 PM

選擇 pg 並按 next:
Screenshot 2024-08-26 at 6.00.32 PM

設定:
Screenshot 2024-08-26 at 5.58.48 PM

Database 輸入 POSTGRES_DB
Username 輸入 POSTGRES_USER
Password 輸入 POSTGRES_PASSWORD

看 table

table 藏在這裡
Screenshot 2024-08-26 at 6.03.14 PM

這時候可以從 django makemigraions 然後 migrate 試試看有沒有成功。有成功的話應該會長出一堆table。

對照表

postgresql django dbeaver
POSTGRES_PASSWORD PASSWORD Password
POSTGRES_USER USER Username
POSTGRES_DB NAME Database

下一篇
Python 描述器
系列文
學習網頁開發13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言